home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / Font.h < prev    next >
C/C++ Source or Header  |  1992-04-27  |  4KB  |  175 lines

  1. #ifndef Font_First
  2. #ifdef __GNUG__
  3. //pragma once
  4. #pragma interface
  5. #endif
  6. #define Font_First
  7.  
  8. #include "Rectangle.h"
  9. #include "Object.h"
  10.  
  11. enum GrFont {
  12.     eFontTimes,
  13.     eFontHelvetica,
  14.     eFontCourier,
  15.     eFontSymbol,
  16.     eFontChicago,
  17.     eFontAvantgarde,
  18.     eFontBookman,
  19.     eFontSchoolbook,
  20.     eFontNHelvetica,
  21.     eFontPalatino,
  22.     eFontChancery,
  23.     eFontDingbats,
  24.     
  25.     eFontDefault    =   eFontTimes
  26. };
  27.  
  28. enum GrFace {
  29.     eFacePlain      = 0,
  30.     eFaceBold       = BIT(0),
  31.     eFaceItalic     = BIT(1),
  32.     eFaceUnderline  = BIT(2),
  33.     eFaceOutline    = BIT(3),
  34.     eFaceShadow     = BIT(4),
  35. };
  36.  
  37. enum GrHAdjust {
  38.     eAdjHLeft,
  39.     eAdjHCenter,
  40.     eAdjHRight
  41. };
  42.  
  43. enum GrVAdjust {
  44.     eAdjVBottom,
  45.     eAdjVTop,
  46.     eAdjVBase,
  47.     eAdjVCenter
  48. };
  49.  
  50. const int cCharsPerFont = 256;
  51.  
  52. //---- FontFamily --------------------------------------------------------------
  53.  
  54. class FontFamily : public Object {
  55. public:
  56.     GrFont fid;
  57.     bool fixed;             // is a fixed character font
  58.     class OrdCollection *fmap;
  59.     
  60. public:
  61.     MetaDef(FontFamily);
  62.     FontFamily(GrFont fid);
  63.     ~FontFamily();
  64.  
  65.     char *Name();
  66.     GrFont Fid()
  67.     { return fid; }
  68.     bool Fixed()
  69.     { return fixed; }
  70.     class Font *MapSizeFace(int, GrFace);
  71.     Font *MapSizeFace2(int size, GrFace face, bool dflt= FALSE);
  72.     void InspectorId(char *buf, int bufSize);
  73.     void CollectParts(class Collection *);
  74. };
  75.  
  76. //---- Font --------------------------------------------------------------------
  77.  
  78. class Font : public Object {
  79. protected:
  80.     u_short cw[cCharsPerFont];        // character widths
  81.     GrFace face;            // style
  82.     short size;             // point size
  83.     short ils;              // interline spacing
  84.     short ht;               // maximum ascender
  85.     short bs;               // maximum descender
  86.     short width;            // max width
  87.     FontFamily *ff;
  88.     class DevFont *dft;
  89.     
  90.     Font(FontFamily*, short size, GrFace face);
  91.     
  92. public:
  93.     MetaDef(Font);
  94.     
  95.     friend Font *new_Font(GrFont fid, int size, GrFace face= eFacePlain);
  96.     friend Font *new_Font(GrFont fid, int size, GrFace face, bool real);
  97.     
  98.     DevFont *GetDevFont()
  99.     { return dft; }
  100.  
  101.     int Width(byte c)
  102.     { return cw[c]; }
  103.     int Width(byte*, int l= -1);
  104.     int MaxWidth(int l= 1);
  105.     Metric GetMetric(byte *s, int l= -1);
  106.     Metric GetMetric(byte c);
  107.     Rectangle BBox(byte *s, int l= -1);
  108.     Rectangle BBox(byte c, Point pos);
  109.     Point AdjustString(byte *s, Point p, GrVAdjust va, GrHAdjust ha);
  110.  
  111.     int Ascender()
  112.     { return ht; }
  113.     int Descender()
  114.     { return bs; }
  115.     int Size()
  116.     { return size; }
  117.     GrFace Face()
  118.     { return face; }
  119.     int Spacing()
  120.     { return ils; }
  121.  
  122.     GrFont Fid()
  123.     { return ff->Fid(); }
  124.     bool Fixed()
  125.     { return ff->Fixed(); }
  126.     char *Name()
  127.     { return ff->Name(); }
  128.  
  129.     Font *WithFace(GrFace face);
  130.     Font *WithSize(int size);
  131.  
  132.     virtual class DevBitmap *CharAsBitmap(byte, Point *offset);
  133.  
  134.     char *AsString();
  135.     u_long Hash();
  136.     bool IsEqual (Object*);
  137.     OStream& PrintOn(OStream&);
  138.     Object *ReadAndMap(IStream&);
  139. };
  140.  
  141. extern Font *gSysFont,
  142.         *gApplFont,
  143.         *gFixedFont;
  144.  
  145. //---- FontManager -------------------------------------------------------------
  146.  
  147. class FontManager : public Object {
  148. protected:
  149.     class ObjArray *fmap;
  150.     
  151. public:
  152.     MetaDef(FontManager);
  153.     FontManager();
  154.     ~FontManager();
  155.     
  156.     bool Init();        // returns TRUE on error
  157.     
  158.     virtual Font *MapFont(GrFont fid, int size, GrFace face);
  159.     virtual Font *MakeFont(FontFamily*, int size, GrFace face, bool dflt= FALSE);
  160.     virtual Font *ScaleFont(FontFamily *ff, int, GrFace);
  161.     
  162.     FontFamily *MapFamily(GrFont fid);
  163.     
  164.     char *StyleString(GrFace face);
  165.  
  166.     GrFont NameToId(char *fontname);
  167.     char *IdToName(GrFont fid);
  168.     void CollectParts(class Collection *);
  169. };
  170.  
  171. extern FontManager *gFontManager;
  172.  
  173. #endif
  174.  
  175.